package com.rocketmq.temp3.entity.support;

import tk.mybatis.mapper.genid.GenId;

/**
 * (1)分布式全局ID设计考量：
 * 服务器标识 + 当前线程标识 + 时间戳 + 计数器
 * (2)令人悲伤的事：tk.mapper本身的MySqlMapper支持批量插入，例如：MySqlMapper.insertList(recordList)。
 * 但是，经过实际测试验证得知：@KeySql(genId = AppGenId.class)这种方式在执行批量插入操作时，无法触发GenId机制！
 * 因此，对于单条插入，这种方式还是很方便的，因为不需要每次都显式触发生成全局唯一ID的执行。。。
 * (3)针对(2)的问题，设计者不可能注意不到，因此，tk.mapper还有另外一个不支持主键策略的批量插入接口tk.mybatis.mapper.additional.insert.InsertListMapper《T》，
 * 幸运的是，该接口自2018-04-22 后已经支持 @KeySql 注解的 genId 方式。我们在引用时，需要区别于MySqlMapper下支持主键策略的接口tk.mybatis.mapper.common.special.InsertListMapper《T》
 */
public class AppGenId implements GenId<String> {

    private static AppGenKey genKey;

    @Override
    public String genId(String table, String column) {
        return String.valueOf(AppGenId.genKey.getUniqueKey());
    }

    public void setGenKey(AppGenKey genKey) {
        AppGenId.genKey = genKey;
    }
}
